import { Message, Notification } from 'element-ui';
import errorCode from '@/utils/errorCode'
//颜色没改正
import nprogress from "nprogress";
import {cacheAdapterEnhancer} from 'axios-extensions'
import LRUCache from 'lru-cache';

// let isClient = process.env.VUE_ENV === 'client' //区分端
export default ({ redirect, $axios, app }, inject) => {
  $axios.defaults.baseURL = 'http://124.222.236.194:8080/ruoyi-admin'
    //缓存
    // let defaultAdapter=$axios.defaults.adapter
    // let cacheCfg=new LRUCache({
    //   maxAge:1000*60*60,
    //   max:2000
    // })
    // $axios.defaults.adapter=cacheAdapterEnhancer(defaultAdapter,{enabledByDefault:false,cacheFlag:'useCache',defaultCache:cacheCfg})
    $axios.defaults.timeout = 10000;
    //请求之前做的事情
    $axios.onRequest(config => {
        // nprogress.start();
        let token = app.$cookies.get(app.api.TOKENKEY)
        if (token) config.headers.Authorization = token;
        // return new Promise((resolve, reject) => {
        //     //match api
        //     let token = app.$cookies.get('token')
        //     console.log('我是拦截器3号',token);
        //     //add token
        //     if (token) config.headers.Authorization = token;
        //     //其他的请求前业务逻辑 比如：api map
        //     resolve(config);
        // })
    });

    //获取数据后做的事情
    $axios.onResponse(res => {
        //返回数据逻辑处理 比如：error_code错误处理
        const code = res.data.code || 200;
        // 获取错误信息
        let msg = errorCode[code] || res.data.msg || errorCode['default']
        // 二进制数据则直接返回
        // if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
        //     return res.data
        // }
        if (msg == "Network Error") {
            msg = "后端接口连接异常";
            Message({
                message: msg,
                type: 'error',
                duration: 1000
            })
        }
        else if (msg.includes("timeout")) {
            msg = "系统接口请求超时";
            Message({
                message: msg,
                type: 'error',
                duration: 1000
            })
        }
        else if (msg.includes("Request failed with status code")) {
            msg = "系统接口" + msg.substr(msg.length - 3) + "异常";
            Message({
                message: msg,
                type: 'error',
                duration: 1000
            })
        }

        else if (code === 401) {
          Message({
            message: '未登录或者登录状态已过期，您可以继续留在该页面，或者重新登录',
            type: 'error',
            duration: 1000
          })
          app.$cookies.remove(app.api.TOKENKEY)
          // setInterval(() => {
          //     app.$cookies.remove('token')
          //     //强制刷新
          //     // location.reload(true)
          // }, 1000)
        }
    else if (code === 401) {
      Message({
        message: '未登录或者登录状态已过期，您可以继续留在该页面，或者重新登录',
        type: 'error',
        duration: 1000
      })
      app.$cookies.remove('token')
      // setInterval(() => {
      //     app.$cookies.remove('token')
      //     //强制刷新
      //     // location.reload(true)
      // }, 1000)

      // messageBox.confirm('未登录或者登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
      //     confirmButtonText: '重新登录',
      //     cancelButtonText: '取消',
      //     type: 'warning'
      // }).then(() => {
      //     // store.dispatch('LogOut').then(() => {
      //     //     location.href = '/index';
      //     // })
      //     app.$cookies.remove('token')
      //     location.href='/'
      //     // redirect('/')
      // }).catch(() => { });
      // return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
    } else if (code === 500) {
      Message({
        message: msg,
        type: 'error'
      })
      // return Promise.reject(new Error(msg))
    } else if (code !== 200) {
      Message({
        message: msg,
        type: 'error'
      })
      // return Promise.reject('error')
    } else {
      return res.data
    }
    // nprogress.done();
    // return new Promise((resolve, reject) => {
    //     //返回数据逻辑处理 比如：error_code错误处理
    //     console.log('我是拦截器的回来部分');
    //     const code = res.data.code || 200;
    //     // 获取错误信息
    //     const msg = errorCode[code] || res.data.msg || errorCode['default']
    //     // 二进制数据则直接返回
    //     if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
    //         return res.data
    //     }
    //     if (code === 401) {
    //         messageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
    //             confirmButtonText: '重新登录',
    //             cancelButtonText: '取消',
    //             type: 'warning'
    //         }
    //         ).then(() => {
    //             // store.dispatch('LogOut').then(() => {
    //             //     location.href = '/index';
    //             // })
    //             redirect('/')
    //         }).catch(() => { });
    //         return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
    //     } else if (code === 500) {
    //         message({
    //             message: msg,
    //             type: 'error'
    //         })
    //         return Promise.reject(new Error(msg))
    //     } else if (code !== 200) {
    //         notification.error({
    //             title: msg
    //         })
    //         return Promise.reject('error')
    //     } else {
    //         console.log('我是错误,code是'+code);
    //         console.log("msg:"+msg);
    //         console.log("res.data"+res.data);
    //     resolve(res.data);
    //         return res.data
    //     }
    //     // resolve(res.data);
    // })
  });

  //返回错误时做的事情
  // $axios.onError(err => {
  //     console.log('err=' + err)
  //     let error=err.toString()
  //     if (error == "Network Error") {
  //         error = "后端接口连接异常";
  //     }
  //     else if (error.includes("timeout")) {
  //         error = "系统接口请求超时";
  //     }
  //     else if (error.includes("Request failed with status code")) {
  //         error = "系统接口" +error.substr(error.length - 3) + "异常";
  //     }
  //     message({
  //         message: error,
  //         type: 'error',
  //         duration: 1000
  //     })
  //     // return Promise.reject(err)
  // })
  // 向nuxt注入一个内置的方法
  // inject('axiosApi', (url, params, method) => {
  //     return new Promise((resolve, reject) => {
  //         $axios({
  //             method: method || "POST",
  //             url: url,
  //             data: params
  //         }).then(res => {
  //             resolve(res)
  //         }).catch(err => {
  //             reject(err)
  //         });
  //     })
  // })
};
